性能对比 | aelf智能合约运行环境性能是EVM的1000倍
aelf作为公链领域中的linux,自立项之初便以商业化的视角来设计公链架构。时至今日,无论是整个网络的架构设计,还是已知的TPS测试数据,aelf都直击着以太坊的痛点。
以太坊的合约执行效率低,一方面因为虚拟机机制和gas费规则带来的一定开销导致效率降低,另一方面因为EVM的256位设计导致合约执行效率更低。 而aelf使用C#的发射机制来调用合约,并且没有多余设计,合约执行效率自然远高于以太坊的合约执行效率。
近期,aelf展开与以太坊EVM性能对比的测试,测试情况如下:
▼
测试用例及代码库
以下是对以太坊loop-DivAdd-10M.json和loop-exp-nop-1M.json的测试情况。
ETH:基于官方go实现版本
https://github.com/ethereum/go-ethereum
AELF:基于官方C#实现版本
https://github.com/AElfProject/AElf
测试用例,对标ETH的标准测试:
https://github.com/ethereum/tests/tree/develop/src/VMTestsFiller
对应的AELF测试程序:
https://github.com/AElfProject/AElf/blob/dev/bench/AElf.Benchmark
▼
机器配置
· 机器型号:
OS=ubuntu 16.04
QEMU Virtual CPU, 2 CPU, 2 logical and 2 physical cores
cpu MHz : 2194.916; cache size : 16384 KB
· AELF相关环境:
BenchmarkDotNet=v0.11.5
.NET Core SDK=2.2.203
[Host] : .NET Core 2.2.4 (CoreCLR 4.6.27521.02, CoreFX 4.6.27521.01), 64bit RyuJIT DEBUG
▼
测试结果
· LoopDivAdd10M:EVM耗时为aelf的169倍,差两个数量级
· LoopExpNop1M:EVM耗时为aelf的1223倍,差三个数量级
❏ EVM
官方go实现版本的自带测试程序执行结果
LoopDivAdd10M:14236.81ms
LoopExpNop1M:639.16568ms
❏ AELF
LoopDivAdd10M:84.01ms
LoopExpNop1M:0.5225ms
· LoopDivAdd10M
除法/加法循环1000万次
❏ 方法:
public override DoubleValue LoopDivAdd(DivAddTestInput input)
{
var r = input.X;
for (uint i = 0; i < input.N; i++)
{
r /= input.Y;
r += input.K;
}
return new DoubleValue {Value = r};
}
❏ 输入:
new DivAddTestInput()
{
X = 100,
Y = 300,
K = 500,
N = 10000000
}
❏ 结果:
· LoopExpNop1M
❏ 方法:
public override Int32Value LoopExpNop(PerformanceTesteInput input)
{
for (uint i = 0; i < input.N; i++)
{
}
return new Int32Value {Value = input.Seed};
}
❏ 输入:
new PerformanceTesteInput()
{
Exponent = 0,
Seed = _executeResult,
N = 1000000
}
❏ 结果:
在试验机配置相同的情况下:
循环运行1000万次加法、除法测试后,以太坊EVM约需要14236.81毫秒,而在aelf的节点测试中仅需84.01毫秒,高于EVM169倍。
空循环运行100万次后,以太坊EVM需要639.16毫秒,而在aelf的节点测试中仅需0.5225毫秒,高于EVM1223倍。
除法加法循环测试(AELF)
https://github.com/AElfProject/AElf/blob/dev/bench/AElf.Benchmark.PerformanceTestContract/PerformanceTestContract.cs
除法加法循环测试(ETH)
https://github.com/ethereum/tests/blob/develop/src/VMTestsFiller/loop-mul.sol
空循环测试(AELF)
https://github.com/AElfProject/AElf/blob/dev/bench/AElf.Benchmark.PerformanceTestContract/PerformanceTestContract.cs
空循环测试(ETH)
https://github.com/ethereum/tests/blob/develop/src/VMTestsFiller/loop-exp.sol
以上链接为测试相关代码GitHub链接,欢迎大家前去查看。